package cn.bugstack.springframework.core.io;

import cn.hutool.core.lang.Assert;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

/**
 * description:
 * @author: aaZhao
 * @date: 2024/3/22 21:16
 */
public class UrlResource implements Resource {

    private final URL url;

    // 这行代码使用了 Spring Framework 中的断言工具 Assert，用于确保给定的 URL 对象不为空。
    // 如果 URL 对象为空，则抛出 IllegalArgumentException 异常，同时给出指定的错误消息："URL must not be null"。
    public UrlResource(URL url) {
        Assert.notNull(url,"URL must not be null");
        this.url = url;
    }

    /**
     * 获取指定URL的输入流。
     * @return InputStream 返回从URL连接获取的输入流。
     * @throws IOException 如果打开连接失败或读取输入流时发生错误，则抛出IOException。
     */
    public InputStream getInputStream() throws IOException {
        URLConnection con = this.url.openConnection();  // 打开与URL的连接
        try {
            return con.getInputStream();  // 尝试获取连接的输入流
        }
        catch (IOException ex){
            if (con instanceof HttpURLConnection){ // 检查连接是否为HttpURLConnection类型
                ((HttpURLConnection) con).disconnect(); // 如果是，则断开连接
            }
            throw ex; // 重新抛出捕获到的IOException
        }
    }


}
